#ifndef _TCS_MSG_
#define _TCS_MSG_

#include "tcs_struct.h"
#include "platform.h"
#include "vxWorks.h"
#include "taskLib.h"
#include "sysLib.h"
#include "msgQLib.h"
#include "semLib.h"
#include "tss_typedef.h"
#include "cipher_typedef.h"

#define TCS_RECEIVEREQ_STACK 100000
#define TCS_DISTRIBUTEREQ_STACK 100000
#define TCS_CIPHER_STACK 100000
#define TCS_TCP_SERVER_STACK 100000

#define TCS_CIPHER_PRI 99
#define TCS_RECEIVEREQ_PRI 99
#define TCS_DISTRIBUTEREQ_PRI 99
#define TCS_TCP_SERVER_PRI 99
#define MSG_SERVER_LENGTH 128
#define MSG_CIPHER_SERVER_LENGTH 32

M_MSG_Head m_MSG_Head; 
MSG_Q_ID msgTcsServer;
MSG_Q_ID msgTcsCipherServer;
SEM_ID semCMsgAsk;

/**
*@brief 初始化TCS层所需的消息队列以及信号量                                                                        
*@retval TDDL_NULL_QUEUE 队列创建失败
*@retval TDDL_SUCCESS 函数执行成功
*/
TSS_RESULT tcs_msg_initMsgSem();

/**
*@brief 初始化TCS层所需的各项服务。它包括了接收、分发、通信以及密码学服务。                                                                        
*@retval TDDL_NULL_QUEUE 队列创建失败
*@retval TDDL_SUCCESS 函数执行成功
*/
TSS_RESULT tcs_msg_serverInit();

/**
*@brief TCS层的接收服务。用于从消息对列中接收命令结构体。                                                                        
*/
void tcs_msg_receiveReq();

/**
*@brief TCS层的分发服务。用于获取最高优先级的命令结构体，解析后调用TDDL层接口。                                                                        
*/
void tcs_msg_distributeReq();

/**
*@brief TCS层的密码学服务。用于获取最高优先级的命令结构体，解析后调用TDDL层接口。                                                                        
*/
void tcs_cipher_server();

/**
*@brief TCS层的通信服务。用于从监听客户端的可信请求。                                                                        
*/
void tcs_tcp_server();

/**
*@brief TCS层通信服务的子功能。用于将TCS监听到的请求进行解析、本地化后\n
*       放入TCS自定义队列并获取命令结果，发送给客户端。
*@param [in] sFd 服务端socket
*@param [in] address 客户IP地址
*@param [in] port 客户端口号                                                                       
*/
void tcs_tcp_server_task(int sFd, char*address);

#endif
